Liskovsches Substitutionsprinzip

Das Liskovsche Substitutionsprinzip (LSP) oder Ersetzbarkeitsprinzip ist ein Kriterium in der objektorientierten Programmierung, das die Bedingungen zur Modellierung eines Datentyps für seinen Untertyp angibt. Es besagt, dass ein Programm, das Objekte einer Basisklasse T verwendet, auch mit Objekten der davon abgeleiteten Klasse S korrekt funktionieren muss, ohne dabei das Programm zu verändern.

Das Liskovsche Substitutionsprinzip wurde erstmals 1987 von Barbara Liskov auf einer Konferenz Data abstraction and hierarchy vorgestellt und wurde 1993 von Barbara Liskov und Jeannette Wing formuliert.[1] In einem nachfolgenden Artikel wurde es folgendermaßen formuliert (Übersetzung):

„Eine stärkere Forderung [als Kovarianz und Kontravarianz] wird benötigt, die das Verhalten von Untertypen einschränkt: Eigenschaften, die anhand der Spezifikation des vermeintlichen Typs eines Objektes bewiesen werden können, sollten auch dann gelten, wenn das Objekt einem Untertyp dieses Typs angehört:

Sei eine beweisbare Eigenschaft von Objekten des Typs . Dann soll für Objekte des Typs wahr sein, wobei ein Untertyp von ist.“[2]

Damit ist garantiert, dass Operationen, die auf ein Objekt des Typs vom Typ angewendet werden, auch korrekt ausgeführt werden. In einigen der heute üblichen Programmiersprachen, die Polymorphie unterstützen, kann dieses Prinzip durch Vererbung von mehr als einem Objekt auf ein anderes verletzt werden. Dann ließe sich nicht stets bedenkenlos ein Objekt vom Typ durch ein Objekt vom Typ ersetzen.

Bezogen auf einzelne Methoden bedeutet das Liskovsche Substitutionsprinzip, dass beim Überschreiben einer Methode durch eine abgeleitete Klasse die Vorbedingungen nur abgeschwächt und die Nachbedingungen nur verstärkt werden dürfen (siehe Design by Contract).

  1. Barbara H. Liskov, Jeannette M. Wing: Family Values: A Behavioral Notion of Subtyping. Pittsburgh 1993.(PostScript)
  2. Barbara H. Liskov, Jeannette M. Wing: Behavioral Subtyping Using Invariants and Constraints. Pittsburgh 1999 (PostScript).

Developed by StudentB